package com.example.crm.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 销售机会实体类
 */
@Data
@TableName("crm_opportunity")
public class Opportunity {

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 机会名称
     */
    private String name;

    /**
     * 客户ID
     */
    private Long customerId;

    /**
     * 联系人ID
     */
    private Long contactId;

    /**
     * 负责人ID
     */
    private Long managerId;

    /**
     * 预计成交金额
     */
    private BigDecimal expectedAmount;

    /**
     * 预计成交日期
     */
    private LocalDateTime expectedClosingDate;

    /**
     * 机会来源
     */
    private String source;

    /**
     * 机会阶段（1-初步接洽，2-需求确认，3-方案制定，4-商务谈判，5-赢单，6-输单）
     */
    private Integer stage;

    /**
     * 赢单率（0-100）
     */
    private Integer winRate;

    /**
     * 下一步计划
     */
    private String nextStep;

    /**
     * 竞争对手
     */
    private String competitor;

    /**
     * 决策人
     */
    private String decisionMaker;

    /**
     * 需求描述
     */
    private String requirements;

    /**
     * 产品信息
     */
    private String products;

    /**
     * 赢单/输单原因
     */
    private String reason;

    /**
     * 备注
     */
    private String remarks;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;

    /**
     * 逻辑删除标记（0-未删除，1-已删除）
     */
    @TableLogic
    private Integer deleted;

    /**
     * 客户名称（非数据库字段）
     */
    @TableField(exist = false)
    private String customerName;

    /**
     * 联系人名称（非数据库字段）
     */
    @TableField(exist = false)
    private String contactName;

    /**
     * 负责人姓名（非数据库字段）
     */
    @TableField(exist = false)
    private String managerName;
    
    /**
     * 阶段名称（非数据库字段）
     */
    @TableField(exist = false)
    private String stageName;
    
    /**
     * 关联的跟进记录（非数据库字段）
     */
    @TableField(exist = false)
    private List<FollowUp> followUps;
} 